module execute3(
        // from previous stage
        input           i_pipe_valid,
        input   [31:2]  i_pipe_pc,
        input   [31:0]  i_pipe_instr,
        input   [31:0]  i_pipe_cpsr,
        input   [31:0]  i_pipe_spsr,
        input           i_pipe_cpsr_nzcv_we,
        input   [ 1:0]  i_pipe_cpsr_nzcv_dsel,
        input   [ 2:0]  i_pipe_cpsr_aif_we,
        input   [ 1:0]  i_pipe_cpsr_aif_dsel,
        input   [ 2:0]  i_pipe_cpsr_aif_d_imm,
        input           i_pipe_cpsr_mode_we,
        input   [ 1:0]  i_pipe_cpsr_mode_dsel,
        input   [ 4:0]  i_pipe_cpsr_mode_d_imm,
        input           i_pipe_spsr_we,
        input           i_pipe_spsr_dsel,
        input   [14:0]  i_pipe_gpr_we,
        input           i_pipe_gpr_we0,
        input   [ 3:0]  i_pipe_gpr_wa0,
        input           i_pipe_gpr_wa0_exc,
        input   [ 1:0]  i_pipe_gpr_dsel0_ex3,
        input   [ 1:0]  i_pipe_gpr_dsel0_wb,
        input   [31:0]  i_pipe_gpr_d0_prev,
        input   [31:0]  i_pipe_gpr_d0_addr,
        input   [31:0]  i_pipe_gpr_d0_ext,
        input           i_pipe_gpr_we1,
        input   [ 3:0]  i_pipe_gpr_wa1,
        input           i_pipe_gpr_wa1_usr,
        input           i_pipe_gpr_dsel1,
        input   [31:0]  i_pipe_gpr_rn,
        input   [ 3:0]  i_pipe_alu_op,
        input   [31:0]  i_pipe_alu_b,
        input           i_pipe_shifter_carry_out,
        input           i_pipe_ls,
        input   [31:0]  i_pipe_ls_addr,
        input           i_pipe_ls_part,
        input           i_pipe_ls_half,
        input           i_pipe_ls_ld_sign_ext,
        input           i_pipe_ls_double,
        input   [31:0]  i_pipe_ls_st_dat2,
        input           i_pipe_ls_unaligned,
        input   [ 7:0]  i_pipe_ls_ld_tmp0,
        input   [ 7:0]  i_pipe_ls_ld_tmp1,
        input   [ 7:0]  i_pipe_ls_ld_tmp2,
        input   [ 7:0]  i_pipe_ls_ld_tmp3,
        input           i_pipe_wb_we,
        input   [31:0]  i_pipe_wb_dat,
        input   [ 3:0]  i_pipe_wb_sel,
        input           i_pipe_branch,
        input   [ 1:0]  i_pipe_branch_dest_sel,
        input   [31:2]  i_pipe_branch_dest_ex1,
        input           i_pipe_mul,
        input   [31:0]  i_pipe_mul_a,
        input   [31:0]  i_pipe_mul_b,
        input           i_pipe_mul_sign,
        input           i_pipe_mul_long,
        input           i_pipe_mul_add,
        input   [63:0]  i_pipe_mul_addend,
        input           i_pipe_mul_data_sent,
        input   [ 1:0]  i_pipe_ext_op,
        input           i_pipe_ext_add,
        input           i_pipe_coproc_sel,
        input   [ 3:0]  i_pipe_coproc_cp_num,
        input   [ 2:0]  i_pipe_coproc_op1,
        input   [ 2:0]  i_pipe_coproc_op2,
        input   [ 3:0]  i_pipe_coproc_crn,
        input   [ 3:0]  i_pipe_coproc_crm,
        input   [31:0]  i_pipe_coproc_din,

        // to next stage
        output          o_pipe_valid,
        output  [31:2]  o_pipe_pc,
        output  [31:0]  o_pipe_instr,
        output  [14:0]  o_pipe_gpr_we,
        output          o_pipe_gpr_we0,
        output  [ 3:0]  o_pipe_gpr_wa0,
        output          o_pipe_gpr_wa0_exc,
        output  [ 1:0]  o_pipe_gpr_dsel0_wb,
        output  [31:0]  o_pipe_gpr_d0_prev,
        output  [31:0]  o_pipe_gpr_d0_alu,
        output  [31:0]  o_pipe_gpr_d0_mul,
        output  [31:0]  o_pipe_gpr_d0_exta,
        output          o_pipe_gpr_we1,
        output  [ 3:0]  o_pipe_gpr_wa1,
        output          o_pipe_gpr_wa1_usr,
        output          o_pipe_gpr_dsel1,
        output  [31:0]  o_pipe_gpr_d1_ld,
        output  [31:0]  o_pipe_gpr_d1_mul,
        output          o_pipe_cpsr_nzcv_we,
        output  [ 1:0]  o_pipe_cpsr_nzcv_dsel,
        output  [ 3:0]  o_pipe_cpsr_nzcv_d_rm,
        output  [ 3:0]  o_pipe_cpsr_nzcv_d_spsr,
        output  [ 3:0]  o_pipe_cpsr_nzcv_d_alu,
        output  [ 3:0]  o_pipe_cpsr_nzcv_d_mul,
        output  [ 2:0]  o_pipe_cpsr_aif_we,
        output  [ 1:0]  o_pipe_cpsr_aif_dsel,
        output  [ 2:0]  o_pipe_cpsr_aif_d_rm,
        output  [ 2:0]  o_pipe_cpsr_aif_d_spsr,
        output  [ 2:0]  o_pipe_cpsr_aif_d_imm,
        output          o_pipe_cpsr_mode_we,
        output  [ 1:0]  o_pipe_cpsr_mode_dsel,
        output  [ 4:0]  o_pipe_cpsr_mode_d_rm,
        output  [ 4:0]  o_pipe_cpsr_mode_d_spsr,
        output  [ 4:0]  o_pipe_cpsr_mode_d_imm,
        output          o_pipe_spsr_we,
        output          o_pipe_spsr_dsel,
        output  [31:0]  o_pipe_spsr_d_rm,
        output  [31:0]  o_pipe_spsr_d_cpsr,
        output          o_pipe_branch,
        output  [ 1:0]  o_pipe_branch_dest_sel,
        output  [31:2]  o_pipe_branch_dest_ex1,

        // feedback output
        output          o_fb_valid,
        output  [31:2]  o_fb_pc,
        output  [31:0]  o_fb_instr,
        output  [31:0]  o_fb_cpsr,
        output  [31:0]  o_fb_spsr,
        output          o_fb_cpsr_nzcv_we,
        output  [ 1:0]  o_fb_cpsr_nzcv_dsel,
        output  [ 2:0]  o_fb_cpsr_aif_we,
        output  [ 1:0]  o_fb_cpsr_aif_dsel,
        output  [ 2:0]  o_fb_cpsr_aif_d_imm,
        output          o_fb_cpsr_mode_we,
        output  [ 1:0]  o_fb_cpsr_mode_dsel,
        output  [ 4:0]  o_fb_cpsr_mode_d_imm,
        output          o_fb_spsr_we,
        output          o_fb_spsr_dsel,
        output  [14:0]  o_fb_gpr_we,
        output          o_fb_gpr_we0,
        output  [ 3:0]  o_fb_gpr_wa0,
        output          o_fb_gpr_wa0_exc,
        output  [ 1:0]  o_fb_gpr_dsel0_ex3,
        output  [ 1:0]  o_fb_gpr_dsel0_wb,
        output  [31:0]  o_fb_gpr_d0_prev,
        output  [31:0]  o_fb_gpr_d0_addr,
        output  [31:0]  o_fb_gpr_d0_ext,
        output          o_fb_gpr_we1,
        output  [ 3:0]  o_fb_gpr_wa1,
        output          o_fb_gpr_wa1_usr,
        output          o_fb_gpr_dsel1,
        output  [31:0]  o_fb_gpr_rn,
        output  [ 3:0]  o_fb_alu_op,
        output  [31:0]  o_fb_alu_b,
        output          o_fb_shifter_carry_out,
        output          o_fb_ls,
        output  [31:0]  o_fb_ls_addr,
        output          o_fb_ls_part,
        output          o_fb_ls_half,
        output          o_fb_ls_ld_sign_ext,
        output          o_fb_ls_double,
        output  [31:0]  o_fb_ls_st_dat2,
        output          o_fb_ls_unaligned,
        output  [ 7:0]  o_fb_ls_ld_tmp0,
        output  [ 7:0]  o_fb_ls_ld_tmp1,
        output  [ 7:0]  o_fb_ls_ld_tmp2,
        output  [ 7:0]  o_fb_ls_ld_tmp3,
        output          o_fb_wb_we,
        output  [31:0]  o_fb_wb_dat,
        output  [ 3:0]  o_fb_wb_sel,
        output          o_fb_branch,
        output  [ 1:0]  o_fb_branch_dest_sel,
        output  [31:2]  o_fb_branch_dest_ex1,
        output          o_fb_mul,
        output  [31:0]  o_fb_mul_a,
        output  [31:0]  o_fb_mul_b,
        output          o_fb_mul_sign,
        output          o_fb_mul_long,
        output          o_fb_mul_add,
        output  [63:0]  o_fb_mul_addend,
        output          o_fb_mul_data_sent,
        output  [ 1:0]  o_fb_ext_op,
        output          o_fb_ext_add,
        output          o_fb_coproc_sel,
        output  [ 3:0]  o_fb_coproc_cp_num,
        output  [ 2:0]  o_fb_coproc_op1,
        output  [ 2:0]  o_fb_coproc_op2,
        output  [ 3:0]  o_fb_coproc_crn,
        output  [ 3:0]  o_fb_coproc_crm,
        output  [31:0]  o_fb_coproc_din,

        // pipeline control
        output          o_update,
        output          o_done,
        output          o_valid,

        // from wishbone
        input           i_wb_ack,    // cgen: type=input cname=i_wb_ack
        input   [31:0]  i_wb_dat,    // cgen: type=input cname=i_wb_dat

        // from multiplier
        input           i_mul_ready, // cgen: type=input cname=i_pipe_mul_ready
        input   [31:0]  i_mul_hi,    // cgen: type=input cname=i_pipe_mul_hi
        input   [31:0]  i_mul_lo,    // cgen: type=input cname=i_pipe_mul_lo

        // to wishbone
        output          o_wb_cyc,    // cgen: type=output cname=o_wb_cyc
        output          o_wb_stb,    // cgen: type=output cname=o_wb_stb
        output          o_wb_we,     // cgen: type=output cname=o_wb_we
        output  [31:2]  o_wb_adr,    // cgen: type=output cname=o_wb_adr
        output  [ 3:0]  o_wb_sel,    // cgen: type=output cname=o_wb_sel
        output  [31:0]  o_wb_dat,    // cgen: type=output cname=o_wb_dat
        output  [ 2:0]  o_wb_cti,    // cgen: type=output cname=o_wb_cti
        output  [ 1:0]  o_wb_bte,    // cgen: type=output cname=o_wb_bte

        // to multiplier
        output          o_mul_valid, // cgen: type=output cname=o_pipe_mul_valid
        output  [31:0]  o_mul_a,     // cgen: type=output cname=o_pipe_mul_a
        output  [31:0]  o_mul_b,     // cgen: type=output cname=o_pipe_mul_b
        output          o_mul_add,   // cgen: type=output cname=o_pipe_mul_add
        output  [63:0]  o_mul_addend,// cgen: type=output cname=o_pipe_mul_addend
        output          o_mul_sign,  // cgen: type=output cname=o_pipe_mul_sign

        output          o_coproc_sel,
        output  [ 3:0]  o_coproc_cp_num,
        output  [ 2:0]  o_coproc_op1,
        output  [ 2:0]  o_coproc_op2,
        output  [ 3:0]  o_coproc_crn,
        output  [ 3:0]  o_coproc_crm,
        output  [31:0]  o_coproc_din
);

`include "enum.vh"

wire    [31:0]  dat_postproc_in;
wire            alu_op_add;
wire    [ 3:0]  alu_nzcv;
wire    [ 3:0]  nzcv_d_alu;
wire    [ 3:0]  nzcv_d_mul;
reg     [31:0]  gpr_d0_prev;
wire    [31:0]  gpr_d0_alu;
wire    [31:0]  gpr_d0_exta;
wire    [31:0]  gpr_d1_ld;

wire            ready;

alu u_alu(
  .a(i_pipe_gpr_rn),
  .b(i_pipe_alu_b),
  .cin(i_pipe_cpsr[29]),
  .op(i_pipe_alu_op),
  .o_result(gpr_d0_alu),
  .o_nzcv(alu_nzcv)
);

adder_ext u_adder_ext(
        .i_ext_out(i_pipe_gpr_d0_ext),
        .i_rn(i_pipe_gpr_rn),
        .i_add(i_pipe_ext_add),
        .i_op(i_pipe_ext_op),
        .o_result(gpr_d0_exta)
);

dat_postproc u_dat_postproc(
        .i_part(i_pipe_ls_part),
        .i_half(i_pipe_ls_half),
        .i_sign_ext(i_pipe_ls_ld_sign_ext),
        .i_byte_index(i_pipe_ls_addr[1:0]),
        .i_data(dat_postproc_in),
        .o_result(gpr_d1_ld)
);

always @* begin
        case (i_pipe_gpr_dsel0_ex3)
                GPR_DSEL0_EX3_PREV : gpr_d0_prev = i_pipe_gpr_d0_prev ;
                GPR_DSEL0_EX3_ADDR : gpr_d0_prev = i_pipe_gpr_d0_addr ;
                GPR_DSEL0_EX3_EXT  : gpr_d0_prev = i_pipe_gpr_d0_ext  ;
                default            : gpr_d0_prev = 32'bx         ;
        endcase
end

assign alu_op_add = i_pipe_alu_op[2:1] == 2'b01 | i_pipe_alu_op[3:2] == 2'b01 ;

assign dat_postproc_in =
       {i_pipe_wb_sel[3] ? i_wb_dat[31:24] : i_pipe_ls_ld_tmp3,
        i_pipe_wb_sel[2] ? i_wb_dat[23:16] : i_pipe_ls_ld_tmp2,
        i_pipe_wb_sel[1] ? i_wb_dat[15: 8] : i_pipe_ls_ld_tmp1,
        i_pipe_wb_sel[0] ? i_wb_dat[ 7: 0] : i_pipe_ls_ld_tmp0};

assign nzcv_d_alu =
       {alu_nzcv[3],
        alu_nzcv[2],
        alu_op_add ? alu_nzcv[1] : i_pipe_shifter_carry_out,
        alu_op_add ? alu_nzcv[0] : i_pipe_cpsr[28]};

assign nzcv_d_mul =
       {i_pipe_mul_long ? i_mul_hi[31] : i_mul_lo[31],
        i_pipe_mul_long ? ~|{i_mul_hi, i_mul_lo} : ~|i_mul_lo,
        i_pipe_cpsr[29],
        i_pipe_cpsr[28]};

assign o_pipe_valid = ready & o_done & i_pipe_valid;
assign o_pipe_pc = i_pipe_pc;
assign o_pipe_instr = i_pipe_instr;
assign o_pipe_gpr_we = i_pipe_gpr_we;
assign o_pipe_gpr_we0 = ready & o_done & i_pipe_gpr_we0;
assign o_pipe_gpr_wa0 = i_pipe_gpr_wa0;
assign o_pipe_gpr_wa0_exc = i_pipe_gpr_wa0_exc;
assign o_pipe_gpr_dsel0_wb = i_pipe_gpr_dsel0_wb;
assign o_pipe_gpr_d0_prev = gpr_d0_prev;
assign o_pipe_gpr_d0_alu  = gpr_d0_alu;
assign o_pipe_gpr_d0_mul  = i_mul_lo;
assign o_pipe_gpr_d0_exta = gpr_d0_exta;
assign o_pipe_gpr_we1 = ready & ( o_done | i_pipe_ls & i_pipe_ls_double ) & i_pipe_gpr_we1;
assign o_pipe_gpr_wa1 = i_pipe_gpr_wa1;
assign o_pipe_gpr_wa1_usr = i_pipe_gpr_wa1_usr;
assign o_pipe_gpr_dsel1 = i_pipe_gpr_dsel1;
assign o_pipe_gpr_d1_ld = gpr_d1_ld;
assign o_pipe_gpr_d1_mul = i_mul_hi;
assign o_pipe_cpsr_nzcv_we = ready & o_done & i_pipe_cpsr_nzcv_we;
assign o_pipe_cpsr_nzcv_dsel = i_pipe_cpsr_nzcv_dsel;
assign o_pipe_cpsr_nzcv_d_rm = i_pipe_alu_b[31:28];
assign o_pipe_cpsr_nzcv_d_spsr = i_pipe_spsr[31:28];
assign o_pipe_cpsr_nzcv_d_alu = nzcv_d_alu;
assign o_pipe_cpsr_nzcv_d_mul = nzcv_d_mul;
assign o_pipe_cpsr_aif_we = {3{ready & o_done}} & i_pipe_cpsr_aif_we;
assign o_pipe_cpsr_aif_dsel = i_pipe_cpsr_aif_dsel;
assign o_pipe_cpsr_aif_d_rm = i_pipe_alu_b[8:6];
assign o_pipe_cpsr_aif_d_spsr = i_pipe_spsr[8:6];
assign o_pipe_cpsr_aif_d_imm = i_pipe_cpsr_aif_d_imm;
assign o_pipe_cpsr_mode_we = ready & o_done & i_pipe_cpsr_mode_we;
assign o_pipe_cpsr_mode_dsel = i_pipe_cpsr_mode_dsel;
assign o_pipe_cpsr_mode_d_rm = i_pipe_alu_b[4:0];
assign o_pipe_cpsr_mode_d_spsr = i_pipe_spsr[4:0];
assign o_pipe_cpsr_mode_d_imm = i_pipe_cpsr_mode_d_imm;
assign o_pipe_spsr_we = ready & o_done & i_pipe_spsr_we;
assign o_pipe_spsr_dsel = i_pipe_spsr_dsel;
assign o_pipe_spsr_d_rm = i_pipe_alu_b;
assign o_pipe_spsr_d_cpsr = i_pipe_cpsr;
assign o_pipe_branch = ready & o_done & i_pipe_branch;
assign o_pipe_branch_dest_sel = i_pipe_branch_dest_sel;
assign o_pipe_branch_dest_ex1 = i_pipe_branch_dest_ex1;

assign o_fb_valid = i_pipe_valid;
assign o_fb_pc = i_pipe_pc;
assign o_fb_instr = i_pipe_instr;
assign o_fb_cpsr = i_pipe_cpsr;
assign o_fb_spsr = i_pipe_spsr;
assign o_fb_cpsr_nzcv_we = i_pipe_cpsr_nzcv_we;
assign o_fb_cpsr_nzcv_dsel = i_pipe_cpsr_nzcv_dsel;
assign o_fb_cpsr_aif_we = i_pipe_cpsr_aif_we;
assign o_fb_cpsr_aif_dsel = i_pipe_cpsr_aif_dsel;
assign o_fb_cpsr_aif_d_imm = i_pipe_cpsr_aif_d_imm;
assign o_fb_cpsr_mode_we = i_pipe_cpsr_mode_we;
assign o_fb_cpsr_mode_dsel = i_pipe_cpsr_mode_dsel;
assign o_fb_cpsr_mode_d_imm = i_pipe_cpsr_mode_d_imm;
assign o_fb_spsr_we = i_pipe_spsr_we;
assign o_fb_spsr_dsel = i_pipe_spsr_dsel;
assign o_fb_gpr_we = i_pipe_gpr_we;
assign o_fb_gpr_we0 = i_pipe_gpr_we0;
assign o_fb_gpr_wa0 = i_pipe_gpr_wa0;
assign o_fb_gpr_wa0_exc = i_pipe_gpr_wa0_exc;
assign o_fb_gpr_dsel0_ex3 = i_pipe_gpr_dsel0_ex3;
assign o_fb_gpr_dsel0_wb = i_pipe_gpr_dsel0_wb;
assign o_fb_gpr_d0_prev = i_pipe_gpr_d0_prev;
assign o_fb_gpr_d0_addr = i_pipe_gpr_d0_addr;
assign o_fb_gpr_d0_ext = i_pipe_gpr_d0_ext;
assign o_fb_gpr_we1 = i_pipe_gpr_we1;
assign o_fb_gpr_wa1 = i_pipe_ls & i_pipe_ls_double ? i_pipe_gpr_wa1|1 : i_pipe_gpr_wa1 ;
assign o_fb_gpr_wa1_usr = i_pipe_gpr_wa1_usr;
assign o_fb_gpr_dsel1 = i_pipe_gpr_dsel1;
assign o_fb_gpr_rn = i_pipe_gpr_rn;
assign o_fb_alu_op = i_pipe_alu_op;
assign o_fb_alu_b = i_pipe_alu_b;
assign o_fb_shifter_carry_out = i_pipe_shifter_carry_out;
assign o_fb_ls = i_pipe_ls;
assign o_fb_ls_addr = i_pipe_ls_addr+4;
assign o_fb_ls_part = i_pipe_ls_part;
assign o_fb_ls_half = i_pipe_ls_half;
assign o_fb_ls_ld_sign_ext = i_pipe_ls_ld_sign_ext;
assign o_fb_ls_double = 1'b0;
assign o_fb_ls_st_dat2 = i_pipe_ls_st_dat2;
assign o_fb_ls_unaligned = 1'b0;
assign o_fb_ls_ld_tmp0 = i_wb_dat[ 7: 0];
assign o_fb_ls_ld_tmp1 = i_wb_dat[15: 8];
assign o_fb_ls_ld_tmp2 = i_wb_dat[23:16];
assign o_fb_ls_ld_tmp3 = i_wb_dat[31:24];
assign o_fb_wb_we = i_pipe_wb_we;
assign o_fb_wb_dat = i_pipe_ls & i_pipe_ls_double ? i_pipe_ls_st_dat2 : i_pipe_wb_dat ;
assign o_fb_wb_sel = i_pipe_ls & i_pipe_ls_double ? 4'b1111 : i_pipe_ls_part ? 4'b0001 : ~i_pipe_wb_sel ;
assign o_fb_branch = i_pipe_branch;
assign o_fb_branch_dest_sel = i_pipe_branch_dest_sel;
assign o_fb_branch_dest_ex1 = i_pipe_branch_dest_ex1;
assign o_fb_mul = i_pipe_mul;
assign o_fb_mul_a = i_pipe_mul_a;
assign o_fb_mul_b = i_pipe_mul_b;
assign o_fb_mul_sign = i_pipe_mul_sign;
assign o_fb_mul_long = i_pipe_mul_long;
assign o_fb_mul_add = i_pipe_mul_add;
assign o_fb_mul_addend = i_pipe_mul_addend;
assign o_fb_mul_data_sent = i_pipe_mul_data_sent | i_mul_ready;
assign o_fb_ext_op = i_pipe_ext_op;
assign o_fb_ext_add = i_pipe_ext_add;
assign o_fb_coproc_sel = i_pipe_coproc_sel;
assign o_fb_coproc_cp_num = i_pipe_coproc_cp_num;
assign o_fb_coproc_op1 = i_pipe_coproc_op1;
assign o_fb_coproc_op2 = i_pipe_coproc_op2;
assign o_fb_coproc_crn = i_pipe_coproc_crn;
assign o_fb_coproc_crm = i_pipe_coproc_crm;
assign o_fb_coproc_din = i_pipe_coproc_din;

assign ready = ~(i_pipe_ls & ~i_wb_ack);

assign o_update = ready;
assign o_done = ~(i_pipe_ls & (i_pipe_ls_unaligned | i_pipe_ls_double) | i_pipe_mul & ~(i_pipe_mul_data_sent & i_mul_ready));
assign o_valid = i_pipe_valid;

assign o_wb_cyc = i_pipe_ls;
assign o_wb_stb = i_pipe_ls;
assign o_wb_we  = i_pipe_wb_we;
assign o_wb_adr = i_pipe_ls_addr[31:2];
assign o_wb_dat = i_pipe_wb_dat;
assign o_wb_sel = i_pipe_wb_sel;
assign o_wb_cti = 3'b0;
assign o_wb_bte = 2'b0;
assign o_mul_valid = i_pipe_mul;
assign o_mul_a = i_pipe_mul_a;
assign o_mul_b = i_pipe_mul_b;
assign o_mul_sign = i_pipe_mul_sign;
assign o_mul_add = i_pipe_mul_add;
assign o_mul_addend = i_pipe_mul_addend;

assign o_coproc_sel = i_pipe_coproc_sel;
assign o_coproc_cp_num = i_pipe_coproc_cp_num;
assign o_coproc_op1 = i_pipe_coproc_op1;
assign o_coproc_op2 = i_pipe_coproc_op2;
assign o_coproc_crn = i_pipe_coproc_crn;
assign o_coproc_crm = i_pipe_coproc_crm;
assign o_coproc_din = i_pipe_coproc_din;

endmodule
